import 'package:flutter/foundation.dart';
import 'package:get/get.dart';
import '../names.dart';
import '../../services/index.dart';

/// 登录后重定向帮助类
/// 
/// 🔄 核心功能：
/// - 登录成功后重定向到原始页面
/// - 清除重定向路由缓存
/// - 提供便捷的重定向操作
class AuthRedirectHelper {
  static const String tag = 'AuthRedirectHelper';
  
  /// 登录成功后重定向到原始页面
  /// 
  /// 工作流程：
  /// 1. 从存储中获取保存的重定向路由
  /// 2. 如果存在，跳转到该路由并清除缓存
  /// 3. 如果不存在，跳转到主页面
  static Future<void> redirectAfterLogin() async {
    try {
      final storageService = Get.find<StorageService>();
      final redirectRoute = storageService.getString('redirect_route');
      
      if (redirectRoute != null && redirectRoute.isNotEmpty) {
        debugPrint('🔄 $tag: 登录成功，重定向到原始页面: $redirectRoute');
        
        // 清除重定向路由缓存
        await storageService.remove('redirect_route');
        
        // 使用offAllNamed替换整个路由栈，避免用户按返回键回到登录页面
        Get.offAllNamed(redirectRoute);
      } else {
        debugPrint('🏠 $tag: 登录成功，跳转到主页面');
        Get.offAllNamed(RouteNames.systemMain);
      }
      
    } catch (e) {
      debugPrint('❌ $tag: 重定向处理失败: $e');
      // 发生错误时默认跳转到主页面
      Get.offAllNamed(RouteNames.systemMain);
    }
  }

  /// 清除重定向路由缓存
  /// 
  /// 使用场景：
  /// - 用户主动退出登录
  /// - 取消登录操作
  /// - 清理应用状态
  static Future<void> clearRedirectRoute() async {
    try {
      final storageService = Get.find<StorageService>();
      await storageService.remove('redirect_route');
      debugPrint('🧹 $tag: 已清除重定向路由缓存');
    } catch (e) {
      debugPrint('❌ $tag: 清除重定向路由失败: $e');
    }
  }
  
  /// 获取当前保存的重定向路由（用于调试）
  static String? getCurrentRedirectRoute() {
    try {
      final storageService = Get.find<StorageService>();
      return storageService.getString('redirect_route');
    } catch (e) {
      debugPrint('❌ $tag: 获取重定向路由失败: $e');
      return null;
    }
  }
  
  /// 检查是否有待处理的重定向路由
  static bool hasRedirectRoute() {
    final route = getCurrentRedirectRoute();
    return route != null && route.isNotEmpty;
  }
  
  /// 手动设置重定向路由（用于特殊场景）
  /// 
  /// 参数：
  /// - route: 要设置的重定向路由
  static Future<void> setRedirectRoute(String route) async {
    try {
      if (route.isEmpty || route == RouteNames.systemLogin) {
        debugPrint('⚠️ $tag: 无效的重定向路由，忽略: $route');
        return;
      }
      
      final storageService = Get.find<StorageService>();
      await storageService.setString('redirect_route', route);
      debugPrint('💾 $tag: 已设置重定向路由: $route');
    } catch (e) {
      debugPrint('❌ $tag: 设置重定向路由失败: $e');
    }
  }
}
